package com.beidouapp.service;

import java.util.List;

import com.beidouapp.domain.pojo.User;
import com.beidouapp.exception.BusinessException;

public interface UserService {
    /**
     * 检查用户的密码是否正确 用户提供“密码明文”.
     *
     * @param loginname 登录名（精确值）
     * @param password  密码明文
     * @return true 表示正确，反之不正确
     * @throws BusinessException 用户名为空或者密码为空抛出异常
     */
    public boolean checkPassword(String loginname, String password) throws BusinessException;

    public User getUserWithNameAndPassword(String loginName, String password) throws BusinessException;
    
    public User getUserWithName(String loginName) throws BusinessException;

    public void resetPassword(Long userId, String password);

    /**
     * 获取用户信息.
     *
     * @param loginName 登录名（精确值）
     * @return 用户对象
     */
    public User getUser(String loginName);

    /**
     * 添加用户.
     *
     * @param user 用户对象
     * @return 包含ID的用户对象
     * @throws BusinessException 新增失败抛出异常
     */
    public User addUser(User user) throws BusinessException;

    /**
     * 删除用户.
     *
     * @param loginname 登录名（精确值）
     * @return 删除的用户对象
     * @throws BusinessException 删除失败抛出异常
     */
    public User removeUser(String loginname) throws BusinessException;

    /**
     * 获取所有用户.
     *
     * @return 用户集合
     */
    public List<User> getAll();

    /**
     * 修改用户密码.
     *
     * @param loginname   用户登录名
     * @param oldPassword 旧密码
     * @param newPassword 新密码
     * @throws BusinessException 修改失败抛出异常
     */
    public void changePassword(String loginname, String oldPassword, String newPassword) throws BusinessException;


    /**
     * 修改用户密码
     *
     * @param loginName
     * @param oldPassword 原密码
     * @param newPassword 新密码
     * @throws BusinessException
     */
    public void changeUserPassword(Long userId, String loginName, String oldPassword, String newPassword) throws BusinessException;

    /**
     * 根据机构查询机构下所有的用户.
     *
     * @param organizationCode 机构编码.
     * @return 机构下所有的用户集合.
     */
    public List<User> findUserByOrganizationCode(String organizationCode);
}
